package modelo;

import geometria.Coordenada;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 
 * Trayectoria de un objeto móvil, consistente en coordenadas y los segmentos
 * que las unen.
 * 
 */

public class Trayectoria implements Iterable<Coordenada> {
	private List<Coordenada> puntos;

	public Trayectoria() {
		this.puntos = new ArrayList<Coordenada>();
	}

	public boolean esVacia() {
		return puntos.isEmpty();
	}

	public boolean estaEnUltimoPunto() {
		return (puntos.size() == 1);
	}

	public void agregarPunto(Coordenada p) {
		if (!puntos.isEmpty() && p.coincideCon(puntos.get(0), 0D))
			return;
		puntos.add(p);
	}

	@Override
	public Iterator<Coordenada> iterator() {
		return puntos.iterator();
	}

	public void avanzarPunto() throws TrayectoriaVaciaException {
		try {
			puntos.remove(0);
		} catch (IndexOutOfBoundsException e) {
			throw new TrayectoriaVaciaException();
		}

	}

	public Coordenada obtenerProximoPunto() throws TrayectoriaVaciaException {
		try {
			return puntos.get(0);
		} catch (IndexOutOfBoundsException e) {
			throw new TrayectoriaVaciaException();
		}

	}

}
